{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "28a34f8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "#全局变量\n",
    "repo_id = 'lansinuote/diffusion.9.custom_diffusion'\n",
    "checkpoint = 'CompVis/stable-diffusion-v1-4'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3bfead52",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(DDPMScheduler {\n",
       "   \"_class_name\": \"DDPMScheduler\",\n",
       "   \"_diffusers_version\": \"0.17.0.dev0\",\n",
       "   \"beta_end\": 0.012,\n",
       "   \"beta_schedule\": \"scaled_linear\",\n",
       "   \"beta_start\": 0.00085,\n",
       "   \"clip_sample\": false,\n",
       "   \"clip_sample_range\": 1.0,\n",
       "   \"dynamic_thresholding_ratio\": 0.995,\n",
       "   \"num_train_timesteps\": 1000,\n",
       "   \"prediction_type\": \"epsilon\",\n",
       "   \"sample_max_value\": 1.0,\n",
       "   \"set_alpha_to_one\": false,\n",
       "   \"skip_prk_steps\": true,\n",
       "   \"steps_offset\": 1,\n",
       "   \"thresholding\": false,\n",
       "   \"trained_betas\": null,\n",
       "   \"variance_type\": \"fixed_small\"\n",
       " },\n",
       " CLIPTokenizer(name_or_path='CompVis/stable-diffusion-v1-4', vocab_size=49408, model_max_length=77, is_fast=False, padding_side='right', truncation_side='right', special_tokens={'bos_token': AddedToken(\"<|startoftext|>\", rstrip=False, lstrip=False, single_word=False, normalized=True), 'eos_token': AddedToken(\"<|endoftext|>\", rstrip=False, lstrip=False, single_word=False, normalized=True), 'unk_token': AddedToken(\"<|endoftext|>\", rstrip=False, lstrip=False, single_word=False, normalized=True), 'pad_token': '<|endoftext|>'}))"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from diffusers import DDPMScheduler\n",
    "from transformers import CLIPTokenizer\n",
    "\n",
    "#加载两个工具类\n",
    "scheduler = DDPMScheduler.from_pretrained(checkpoint, subfolder='scheduler')\n",
    "tokenizer = CLIPTokenizer.from_pretrained(checkpoint, subfolder='tokenizer')\n",
    "\n",
    "scheduler, tokenizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e6d9526c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using custom data configuration lansinuote--diffusion.9.custom_diffusion-c303234c18848c12\n",
      "Found cached dataset parquet (/root/.cache/huggingface/datasets/lansinuote___parquet/lansinuote--diffusion.9.custom_diffusion-c303234c18848c12/0.0.0/2a3b91fbd88a2c90d1dbbb32b460cf621d31bd5b05b934492fdef7d8d6f236ec)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pixel_values torch.Size([3, 512, 512]) torch.float32\n",
      "input_ids torch.Size([77]) torch.int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Dataset({\n",
       "    features: ['image', 'prompt'],\n",
       "    num_rows: 200\n",
       "})"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from datasets import load_dataset\n",
    "import torchvision\n",
    "\n",
    "#加载数据集\n",
    "dataset = load_dataset(repo_id, split='train')\n",
    "\n",
    "compose = torchvision.transforms.Compose([\n",
    "    torchvision.transforms.RandomHorizontalFlip(0.5),\n",
    "    torchvision.transforms.Resize(\n",
    "        512, interpolation=torchvision.transforms.InterpolationMode.BILINEAR),\n",
    "    torchvision.transforms.RandomCrop(512),\n",
    "    torchvision.transforms.ToTensor(),\n",
    "    torchvision.transforms.Normalize([0.5], [0.5]),\n",
    "])\n",
    "\n",
    "\n",
    "def f(data):\n",
    "    #应用图像数据增强\n",
    "    pixel_values = [compose(i) for i in data['image']]\n",
    "\n",
    "    #文字编码\n",
    "    input_ids = tokenizer(data['prompt'],\n",
    "                          truncation=True,\n",
    "                          padding='max_length',\n",
    "                          max_length=77,\n",
    "                          return_tensors='pt').input_ids\n",
    "\n",
    "    return {'pixel_values': pixel_values, 'input_ids': input_ids}\n",
    "\n",
    "\n",
    "#因为图像增强在每一个epoch中是动态计算的,所以不能简单地用map处理\n",
    "dataset = dataset.with_transform(f)\n",
    "\n",
    "for k, v in dataset[0].items():\n",
    "    print(k, v.shape, v.dtype)\n",
    "\n",
    "dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2a7974fc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(512, 512, 3) float32 (64, 64) float32\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x500 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "import PIL.Image\n",
    "import random\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "\n",
    "#图像增强\n",
    "def preprocess_instance(image, resize):\n",
    "    #计算x和y的偏移量\n",
    "    offset_y = random.randint(0, abs(resize - 512))\n",
    "    offset_x = random.randint(0, abs(resize - 512))\n",
    "\n",
    "    #缩放\n",
    "    image = image.resize((resize, resize),\n",
    "                         resample=PIL.Image.Resampling.BILINEAR)\n",
    "\n",
    "    #压缩到正负1之间\n",
    "    image = (np.array(image) / 127.5 - 1.0).astype(np.float32)\n",
    "\n",
    "    out_image = np.zeros((512, 512, 3), dtype=np.float32)\n",
    "    mask = np.zeros((512, 512))\n",
    "\n",
    "    if resize > 512:\n",
    "        #如果resize大于512,则说明原图被放大,需要裁减到512\n",
    "        out_image = image[offset_y:offset_y + 512, offset_x:offset_x + 512]\n",
    "        #因为是大图裁小,不存在填充,所以mask全1\n",
    "        mask[:, :] = 1.0\n",
    "    else:\n",
    "        #否则说明原图被缩小,把缩小的图黏贴到黑色的背景上\n",
    "        out_image[offset_y:offset_y + resize,\n",
    "                  offset_x:offset_x + resize] = image\n",
    "        #被黏贴的部分是1,剩下的是背景,maks是0\n",
    "        mask[offset_y:offset_y + resize, offset_x:offset_x + resize] = 1.0\n",
    "\n",
    "    #mask缩小到64*64\n",
    "    mask = torch.FloatTensor(mask).unsqueeze(dim=0)\n",
    "    mask = torchvision.transforms.Resize([64, 64])(mask).squeeze(dim=0).numpy()\n",
    "\n",
    "    mask[mask > 0.5] = 1.0\n",
    "    mask[mask <= 0.5] = 0.0\n",
    "\n",
    "    return out_image, mask\n",
    "\n",
    "\n",
    "out_image1, mask1 = preprocess_instance(\n",
    "    PIL.Image.open('instance_images/0.jpg'), 200)\n",
    "out_image2, mask2 = preprocess_instance(\n",
    "    PIL.Image.open('instance_images/0.jpg'), 600)\n",
    "\n",
    "print(out_image1.shape, out_image1.dtype, mask1.shape, mask1.dtype)\n",
    "\n",
    "plt.figure(figsize=(10, 5))\n",
    "\n",
    "plt.subplot(1, 4, 1)\n",
    "plt.imshow(out_image1.clip(0, 1))\n",
    "plt.subplot(1, 4, 2)\n",
    "plt.imshow(mask1, cmap='gray', vmin=0.0, vmax=1.0)\n",
    "plt.subplot(1, 4, 3)\n",
    "plt.imshow(out_image2.clip(0, 1))\n",
    "plt.subplot(1, 4, 4)\n",
    "plt.imshow(mask2, cmap='gray', vmin=0.0, vmax=1.0)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bca72730",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pixel_values torch.Size([3, 512, 512]) torch.float32\n",
      "mask torch.Size([64, 64]) torch.float32\n",
      "input_ids torch.Size([77]) torch.int64\n"
     ]
    }
   ],
   "source": [
    "def get_instance():\n",
    "    #读取一张instance图片\n",
    "    image = PIL.Image.open('instance_images/%d.jpg' % random.choice(range(5)))\n",
    "    image = torchvision.transforms.RandomHorizontalFlip(0.5)(image)\n",
    "\n",
    "    #随机图片尺寸\n",
    "    scale = random.randint(614, 715)\n",
    "    if random.random() < 0.66:\n",
    "        scale = random.randint(170, 512)\n",
    "\n",
    "    #增强图片,得到mask\n",
    "    image, mask = preprocess_instance(image, scale)\n",
    "\n",
    "    #根据增强的类型,对prompt也进行增强\n",
    "    prompt = 'photo of a maorongrong cat'\n",
    "    if scale < 307.2:\n",
    "        prompt = random.choice(['a far away ', 'very small ']) + prompt\n",
    "    if scale > 512:\n",
    "        prompt = random.choice(['zoomed in ', 'close up ']) + prompt\n",
    "\n",
    "    return {\n",
    "        'pixel_values':\n",
    "        torch.FloatTensor(image).permute(2, 0, 1),\n",
    "        'mask':\n",
    "        torch.FloatTensor(mask),\n",
    "        'input_ids':\n",
    "        tokenizer(prompt,\n",
    "                  truncation=True,\n",
    "                  padding='max_length',\n",
    "                  max_length=77,\n",
    "                  return_tensors='pt').input_ids.squeeze(dim=0)\n",
    "    }\n",
    "\n",
    "\n",
    "for k, v in get_instance().items():\n",
    "    print(k, v.shape, v.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0468a90b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_ids torch.Size([2, 77]) torch.int64\n",
      "pixel_values torch.Size([2, 3, 512, 512]) torch.float32\n",
      "mask torch.Size([1, 1, 64, 64]) torch.float32\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "200"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def collate_fn(data):\n",
    "    #取基础数据\n",
    "    #[77]\n",
    "    input_ids = data[0]['input_ids']\n",
    "    #[3, 512, 512]\n",
    "    pixel_values = data[0]['pixel_values']\n",
    "\n",
    "    #取实例数据\n",
    "    #input_ids -> [77]\n",
    "    #pixel_values -> [3, 512, 512]\n",
    "    #mask -> [64, 64]\n",
    "    instance = get_instance()\n",
    "\n",
    "    #合并\n",
    "    #[2, 77]\n",
    "    input_ids = torch.stack([input_ids, instance['input_ids']])\n",
    "    #[2, 3, 512, 512]\n",
    "    pixel_values = torch.stack([pixel_values, instance['pixel_values']])\n",
    "\n",
    "    #mask变形\n",
    "    mask = instance['mask'].reshape(1, 1, 64, 64)\n",
    "\n",
    "    data = {'input_ids': input_ids, 'pixel_values': pixel_values, 'mask': mask}\n",
    "    return data\n",
    "\n",
    "\n",
    "loader = torch.utils.data.DataLoader(dataset,\n",
    "                                     batch_size=1,\n",
    "                                     shuffle=True,\n",
    "                                     collate_fn=collate_fn)\n",
    "\n",
    "for k, v in next(iter(loader)).items():\n",
    "    print(k, v.shape, v.dtype)\n",
    "\n",
    "len(loader)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "98f217f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "encoder 12306.1248\n",
      "vae 8365.3863\n",
      "unet 85952.0964\n"
     ]
    }
   ],
   "source": [
    "from transformers.models.clip.modeling_clip import CLIPTextModel\n",
    "from diffusers import AutoencoderKL, UNet2DConditionModel\n",
    "\n",
    "#加载预训练模型\n",
    "encoder = CLIPTextModel.from_pretrained(checkpoint, subfolder='text_encoder')\n",
    "vae = AutoencoderKL.from_pretrained(checkpoint, subfolder='vae')\n",
    "unet = UNet2DConditionModel.from_pretrained(checkpoint, subfolder='unet')\n",
    "\n",
    "#添加新词\n",
    "tokenizer.add_tokens('maorongrong')\n",
    "encoder.resize_token_embeddings(len(tokenizer))\n",
    "\n",
    "#初始化新词编码\n",
    "#49408 = tokenizer.convert_tokens_to_ids('maorongrong')\n",
    "#42170 = tokenizer.convert_tokens_to_ids('ktn')\n",
    "token_embeds = encoder.get_input_embeddings().weight.data\n",
    "token_embeds[49408] = token_embeds[42170]\n",
    "\n",
    "#只训练词embed层\n",
    "encoder.requires_grad_(False)\n",
    "vae.requires_grad_(False)\n",
    "unet.requires_grad_(False)\n",
    "encoder.text_model.embeddings.token_embedding.requires_grad_(True)\n",
    "\n",
    "\n",
    "def print_model_size(name, model):\n",
    "    print(name, sum(i.numel() for i in model.parameters()) / 10000)\n",
    "\n",
    "\n",
    "print_model_size('encoder', encoder)\n",
    "print_model_size('vae', vae)\n",
    "print_model_size('unet', unet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9858f994",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "attn_processor 1916.928\n"
     ]
    }
   ],
   "source": [
    "from diffusers.models.attention_processor import CustomDiffusionAttnProcessor\n",
    "from diffusers.loaders import AttnProcsLayers\n",
    "\n",
    "\n",
    "#获取注意力层\n",
    "def get_attn_processor():\n",
    "\n",
    "    #根据unet的结构,做一个注意力层的字典\n",
    "    attn_processor = {}\n",
    "    for name, _ in unet.attn_processors.items():\n",
    "        if name.startswith('mid_block'):\n",
    "            #1280 = unet.config.block_out_channels[-1]\n",
    "            hidden_size = 1280\n",
    "\n",
    "        if name.startswith('up_blocks'):\n",
    "            #[1280, 1280, 640, 320] = list(reversed(unet.config.block_out_channels))\n",
    "            hidden_size = [1280, 1280, 640, 320][int(name[10])]\n",
    "\n",
    "        if name.startswith('down_blocks'):\n",
    "            #[320, 640, 1280, 1280] = unet.config.block_out_channels\n",
    "            hidden_size = [320, 640, 1280, 1280][int(name[12])]\n",
    "\n",
    "        train_kv = not name.endswith('attn1.processor')\n",
    "\n",
    "        attn_processor[name] = CustomDiffusionAttnProcessor(\n",
    "            train_kv=train_kv,\n",
    "            train_q_out=False,\n",
    "            hidden_size=hidden_size,\n",
    "            #768 = unet.config.cross_attention_dim\n",
    "            cross_attention_dim=768 if train_kv else None,\n",
    "        )\n",
    "\n",
    "        #加载参数\n",
    "        if train_kv:\n",
    "            param = {\n",
    "                'to_k_custom_diffusion.weight':\n",
    "                unet.state_dict()[name.split('.processor')[0] +\n",
    "                                  '.to_k.weight'],\n",
    "                'to_v_custom_diffusion.weight':\n",
    "                unet.state_dict()[name.split('.processor')[0] +\n",
    "                                  '.to_v.weight'],\n",
    "            }\n",
    "            attn_processor[name].load_state_dict(param)\n",
    "\n",
    "    #设置注意力层到unet模型中,影响unet模型的行为\n",
    "    unet.set_attn_processor(attn_processor)\n",
    "\n",
    "    #封装为模型\n",
    "    return AttnProcsLayers(unet.attn_processors)\n",
    "\n",
    "\n",
    "attn_processor = get_attn_processor()\n",
    "\n",
    "print_model_size('attn_processor', attn_processor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e067d958",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(AdamW (\n",
       " Parameter Group 0\n",
       "     amsgrad: False\n",
       "     betas: (0.9, 0.999)\n",
       "     capturable: False\n",
       "     eps: 1e-08\n",
       "     foreach: None\n",
       "     lr: 2e-05\n",
       "     maximize: False\n",
       "     weight_decay: 0.01\n",
       " ),\n",
       " MSELoss())"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def get_parameters():\n",
    "    return list(encoder.get_input_embeddings().parameters()) + list(\n",
    "        attn_processor.parameters())\n",
    "\n",
    "\n",
    "optimizer = torch.optim.AdamW(get_parameters(),\n",
    "                              lr=2e-5,\n",
    "                              betas=(0.9, 0.999),\n",
    "                              weight_decay=0.01,\n",
    "                              eps=1e-8)\n",
    "\n",
    "criterion = torch.nn.MSELoss(reduction='none')\n",
    "\n",
    "optimizer, criterion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c665b9b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(1.5815, grad_fn=<AddBackward0>)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def get_loss(data):\n",
    "    device = data['input_ids'].device\n",
    "\n",
    "    #文字编码\n",
    "    #[2, 77] -> [2, 77, 768]\n",
    "    out_encoder = encoder(data['input_ids'])[0]\n",
    "\n",
    "    #抽取图像特征图\n",
    "    #[2, 3, 512, 512] -> [2, 4, 64, 64]\n",
    "    out_vae = vae.encode(data['pixel_values']).latent_dist.sample()\n",
    "    #0.18215 = vae.config.scaling_factor\n",
    "    out_vae = out_vae * 0.18215\n",
    "\n",
    "    #随机数,unet的计算目标\n",
    "    noise = torch.randn_like(out_vae)\n",
    "\n",
    "    #往特征图中添加噪声\n",
    "    #1000 = scheduler.num_train_timesteps\n",
    "    #2 = out_vae.shape[0]\n",
    "    noise_step = torch.randint(0, 1000, (2, )).long()\n",
    "    noise_step = noise_step.to(device)\n",
    "    out_vae_noise = scheduler.add_noise(out_vae, noise, noise_step)\n",
    "\n",
    "    #根据文字信息,把特征图中的噪声计算出来\n",
    "    #[2, 4, 64, 64]\n",
    "    out_unet = unet(out_vae_noise, noise_step, out_encoder).sample\n",
    "\n",
    "    #拆分两部分计算结果,分别是基础的和instance的\n",
    "    #[2, 4, 64, 64] -> [1, 4, 64, 64],[1, 4, 64, 64]\n",
    "    out_unet, out_unet_instance = torch.chunk(out_unet, 2, dim=0)\n",
    "\n",
    "    #噪声也是分为两部分的\n",
    "    #[2, 4, 64, 64] -> [1, 4, 64, 64],[1, 4, 64, 64]\n",
    "    noise, noise_instance = torch.chunk(noise, 2, dim=0)\n",
    "\n",
    "    #基础部分的loss可以直接计算mse loss\n",
    "    loss = criterion(out_unet, noise).mean()\n",
    "\n",
    "    #instance部分首先简单地计算mse loss,不reduce,后续还要处理mask\n",
    "    #[1, 4, 64, 64],[1, 4, 64, 64] -> [1, 4, 64, 64]\n",
    "    loss_instance = criterion(out_unet_instance, noise_instance)\n",
    "\n",
    "    #loss和mask相乘,pad的部分loss为0\n",
    "    #[1, 4, 64, 64]*[1, 4, 64, 64] -> [1, 4, 64, 64]\n",
    "    loss_instance = loss_instance * data['mask']\n",
    "\n",
    "    #求和求平均\n",
    "    #[1, 4, 64, 64] -> [1] -> scala\n",
    "    loss_instance = loss_instance.sum([1, 2, 3]) / data['mask'].sum([1, 2, 3])\n",
    "    loss_instance = loss_instance.mean()\n",
    "\n",
    "    #两部分loss求和即可\n",
    "    return loss_instance + loss\n",
    "\n",
    "\n",
    "get_loss({\n",
    "    'input_ids': torch.ones(2, 77).long(),\n",
    "    'pixel_values': torch.randn(2, 3, 512, 512),\n",
    "    'mask': torch.ones(1, 1, 64, 64)\n",
    "})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "fdd997dc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 160.5251718647778\n",
      "1 152.0645466875285\n",
      "2 158.88694583065808\n",
      "3 156.2355902325362\n",
      "4 134.70489627867937\n"
     ]
    }
   ],
   "source": [
    "def train():\n",
    "    device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "    unet.to(device)\n",
    "    encoder.to(device)\n",
    "    vae.to(device)\n",
    "    unet.train()\n",
    "\n",
    "    loss_sum = 0\n",
    "    for epoch in range(5):\n",
    "        for i, data in enumerate(loader):\n",
    "            for k in data.keys():\n",
    "                data[k] = data[k].to(device)\n",
    "\n",
    "            loss = get_loss(data)\n",
    "            loss.backward()\n",
    "            loss_sum += loss.item()\n",
    "\n",
    "            torch.nn.utils.clip_grad_norm_(get_parameters(), 1.0)\n",
    "            optimizer.step()\n",
    "            optimizer.zero_grad()\n",
    "\n",
    "        if epoch % 1 == 0:\n",
    "            print(epoch, loss_sum)\n",
    "            loss_sum = 0\n",
    "\n",
    "    #保存词编码\n",
    "    torch.save({'maorongrong': encoder.get_input_embeddings().weight[49408]},\n",
    "               './save/embed_weight.bin')\n",
    "\n",
    "    #保存注意力层参数\n",
    "    unet.save_attn_procs('./save')\n",
    "\n",
    "\n",
    "train()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:cc]",
   "language": "python",
   "name": "conda-env-cc-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
